package com.mingtu.dzpatrol.utils;

import android.content.Context;

import com.google.gson.Gson;
import com.mingtu.dzpatrol.base.BaseApplication;
import com.mingtu.dzpatrol.bean.CityChooseBean;

import org.json.JSONArray;

import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName :
 * @Author : wkk
 * @Date : 2022-3-15 14:20:22
 * @Email : 1281573890@qq.com
 * @Eescription : 使用之前先进行初始化获取数据
 */
public class AddressChooseUtils {
    public static Context context = BaseApplication.getContext();
    private static AddressChooseUtils instance;
    private static List<CityChooseBean> optionsP = new ArrayList<>();
    private static List<ArrayList<String>> optionsC = new ArrayList<>();
    private static List<ArrayList<ArrayList<String>>> optionsA = new ArrayList<>();

    // 单例模式中获取唯一的IntentUtils实例
    public static synchronized AddressChooseUtils getInstance() {
        if (null == instance) {
            instance = new AddressChooseUtils();
        }

        instance = new AddressChooseUtils();
        parseJsonData();
        return instance;
    }

    /**
     * 解析数据
     */
    private static void parseJsonData() {

        /**
         * 注意：assets 目录下的Json文件仅供参考，实际使用可自行替换文件
         * 关键逻辑在于循环体
         *
         * */
        String JsonData = new GetJsonDataUtil().getJson(context, "province.json");//获取assets目录下的json文件数据

        ArrayList<CityChooseBean> cityChooseBean = parseData(JsonData);//用Gson 转成实体

        /**
         * 添加省份数据
         *
         * 注意：如果是添加的JavaBean实体，则实体类需要实现 IPickerViewData 接口，
         * PickerView会通过getPickerViewText方法获取字符串显示出来。
         */
        optionsP = cityChooseBean;

        for (int i = 0; i < cityChooseBean.size(); i++) {//遍历省份
            ArrayList<String> cityList = new ArrayList<>();//该省的城市列表（第二级）
            ArrayList<ArrayList<String>> provinceAreaList = new ArrayList<>();//该省的所有地区列表（第三极）
            String province = cityChooseBean.get(i).getName();

            List<CityChooseBean.CityBean> cityBeans = cityChooseBean.get(i).getCityList();
            for (int c = 0; c < cityBeans.size(); c++) {//遍历该省份的所有城市
                String cityName = cityBeans.get(c).getName();
                cityList.add(cityName);//添加城市
                ArrayList<String> cityAreaList = new ArrayList<>();//该城市的所有地区列表

                //如果无地区数据，建议添加空字符串，防止数据为null 导致三个选项长度不匹配造成崩溃
                /*if (cityBeans.get(c).getArea() == null
                        || cityBeans.get(c).getArea().size() == 0) {
                    city_AreaList.add("");
                } else {
                    city_AreaList.addAll(cityBeans.get(c).getArea());
                }*/
                cityAreaList.addAll(cityBeans.get(c).getArea());
                provinceAreaList.add(cityAreaList);//添加该省所有地区数据
            }

            /**
             * 添加城市数据
             */
            optionsC.add(cityList);

            /**
             * 添加地区数据
             */
            optionsA.add(provinceAreaList);
        }

//        mHandler.sendEmptyMessage(MSG_LOAD_SUCCESS);

    }

    /**
     * Gson 解析
     */
    private static ArrayList<CityChooseBean> parseData(String result) {
        ArrayList<CityChooseBean> detail = new ArrayList<>();
        try {
            JSONArray data = new JSONArray(result);
            Gson gson = new Gson();
            for (int i = 0; i < data.length(); i++) {
                CityChooseBean entity = gson.fromJson(data.optJSONObject(i).toString(), CityChooseBean.class);
                detail.add(entity);
            }
        } catch (Exception e) {
            e.printStackTrace();
//            mHandler.sendEmptyMessage(MSG_LOAD_FAILED);
        }
        return detail;
    }

    public static List<CityChooseBean> getProvince() {
        return optionsP;
    }

    public static List<ArrayList<String>> getCity() {
        return optionsC;
    }

    public static List<ArrayList<ArrayList<String>>> getArea() {
        return optionsA;
    }

}
